package com.university.trade.service.impl;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;

import com.university.trade.redis.RedisClient;
import com.university.trade.util.PropertiesUtil;
/** 
 * 该类的作用： 继承spring的ApplicationListener监听,并监控ContextRefreshedEvent事件（容易初始化完成事件）,在容器加载完毕触发
 * 监听器，用于项目启动的时候初始化缓存信息信息  
 * 2016-11-21 
 * add by yaojinshan
 */
@Service
public class StartAddCacheListener implements ApplicationListener<ContextRefreshedEvent> {
	
	private static Logger logger = Logger.getLogger(StartAddCacheListener.class);
	@Resource
	private RedisClient redisClient;
	// 在web 项目中（spring mvc），系统会存在两个容器，一个是root application context ,另一个就是我们自己的 projectName-servlet  context（作为root application context的子容器）。 这种情况下，就会造成onApplicationEvent方法被执行两次。
	private static boolean isStart = false;//该变量是为了控制 onApplicationEvent 被执行多次
	@Override
	public void onApplicationEvent(ContextRefreshedEvent arg0) {
		if(!isStart){
			PropertiesUtil systemProperties = new PropertiesUtil("/systemConfig.properties");
			logger.debug("----------------项目属性配置缓存 方法二  开始---------------------");
			String system_private_key = systemProperties.getProperty("system_private_key");
			redisClient.setCacheObject("system_private_key", system_private_key);
			logger.debug("----------------项目属性配置缓存 方法二  结束---------------------");
			isStart = true;
		}
	}
}
